package com.snail.leetcode.a.a2701_800;

public class a2708 {

    /**
     * 给你一个下标从 0 开始的整数数组 nums ，它表示一个班级中所有学生在一次考试中的成绩。老师想选出一部分同学组成一个 非空 小组，且这个小组的 实力值 最大，如果这个小组里的学生下标为 i0, i1, i2, ... , ik ，那么这个小组的实力值定义为 nums[i0] * nums[i1] * nums[i2] * ... * nums[ik​] 。
     * <p>
     * 请你返回老师创建的小组能得到的最大实力值为多少。
     * <p>
     * <p>
     * 示例 1：
     * <p>
     * 输入：nums = [3,-1,-5,2,5,-9]
     * 输出：1350
     * 解释：一种构成最大实力值小组的方案是选择下标为 [0,2,3,4,5] 的学生。实力值为 3 * (-5) * 2 * 5 * (-9) = 1350 ，这是可以得到的最大实力值。
     * 示例 2：
     * <p>
     * 输入：nums = [-4,-5,-4]
     * 输出：20
     * 解释：选择下标为 [0, 1] 的学生。得到的实力值为 20 。我们没法得到更大的实力值。
     */
    public static void main(String[] args) {
        int[] nums = new int[]{3,-1,-5,2,5,-9};
        System.out.println("结果" + maxStrength(nums));


//        nums = new int[]{1,5,12,5,5,3,3};
//        System.out.println("结果" + maxStrength(nums));
//        nums = new int[]{1,5,1,-1, -5, 23,3};
//        System.out.println("结果" + maxStrength(nums));
//        nums =new int[]{1,5,12,5,5,3,3};
//        System.out.println("结果" + maxStrength(nums));
//        nums = new int[]{1,-1, -5, 2,5,5,3,3};
//        System.out.println("结果" + maxStrength(nums));
//        nums = new int[]{1,5,12,-1, -5, 23};
//        System.out.println("元数据：" + nums);
//        System.out.println("结果" + maxStrength(nums));



    }

    public static long maxStrength(int[] nums) {

        // 新建数组
        // 查找数据中为 0  或者负数 的数据 index
        // 0 使用1 进行替换
        // 负数 记录档期那所有最大的服务，已经 负数的数量

        int[] newNums = new int[nums.length];
        int maxFuNum = 0;
        int fuNumCount = 0;
        int maxFuNumIndex = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                newNums[i] = 1;
                continue;
            }

            newNums[i] = nums[i];

            if (nums[i] < 0) {
                fuNumCount++;

                if(maxFuNum == 0 ){
                    maxFuNum = nums[i];
                    maxFuNumIndex = i;
                }else if (nums[i] > maxFuNum) {
                    maxFuNum = nums[i];
                    maxFuNumIndex = i;
                    System.out.println("负数最大" + maxFuNumIndex);
                }
            }

        }
        if (fuNumCount>0 && fuNumCount % 2 != 0) {
            newNums[maxFuNumIndex] = 1;
        }
        for (int newNum : newNums) {
            System.out.println(newNum);
        }


        int result = newNums[0];
        for (int i = 1; i < newNums.length; i++) {
            result = result * newNums[i];
        }
        return result;
    }


}
